import path from 'path'
import { defineConfig, loadEnv } from 'vite'
import createVitePlugins from './vite/plugins'

export default defineConfig(({ command, mode }) => {
  const env = loadEnv(mode, process.cwd())
  const isBuild = command === 'build';
  return {
    plugins: [...createVitePlugins(env, isBuild)],
    build: {
      rollupOptions: {
        external: isBuild ? ['vue', 'pinia'] : [], // 忽略第三方库, 如果设置了cdn，兼容
        output: { // 单独打包，利用浏览器缓存
          manualChunks(id) {
            if (id.includes('node_modules')) return 'vendor'
          }
        }
      },
      minify: 'esbuild',
      target: 'es2015', // 如果是公司自己的项目可以更高点
      terserOptions: { compress: { drop_console: isBuild, drop_debugger: isBuild } },
      cssCodeSplit: true, // 启用 CSS 代码分割
      assetsInlineLimit: 4096, // 4KB以下的文件转为 Data URL
    },
    server: {
      hmr: {
        protocol: 'ws', // 可以使用 WebSocket 进行 HMR 通信
      },
      port: 80,
      host: true,
      open: true,
      proxy: {
        // https://cn.vitejs.dev/config/#server-proxy
        '/api': {
          target: 'http://0.0.0.0:11621',
          changeOrigin: true,
          rewrite: (p) => p.replace(/^\/api/, '')
        },
      }
    },
    resolve: {
      // https://cn.vitejs.dev/config/#resolve-alias
      alias: {
        "@": path.resolve(__dirname, "./src"),
      },
      extensions: ['.mjs', '.js', '.jsx', '.tsx', '.json', '.vue']
    },
    css: {
      preprocessorOptions: {
        scss: {
          additionalData: `@use "@/assets/styles/index.scss";`,
          javascriptEnabled: true,
          modifyVars: {
            // '@primary-color': '#1890ff', // 主色
            // '@border-radius-base': '4px', // 圆角
          }, // 主题变量可选
        }
      }
    }
  }
});
